Make app menu fallback a bit more reliable
authorMatthias Clasen <mclasen@redhat.com>
Fri, 13 Dec 2013 06:19:12 +0000 (01:19 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 13 Dec 2013 06:21:06 +0000 (01:21 -0500)
If the theme has no 'menu' control in the window decorations,
show the menubar after all.

gtk/gtkheaderbar.c
gtk/gtkheaderbarprivate.h
gtk/gtkwindow.c

index 70a77d7e154aeb20421a3381063196ec2b2fbfd3..9964f12a7e58779aeae3f210be6d32acd8ad24f9 100644 (file)
@@ -486,11 +486,24 @@ _gtk_header_bar_update_window_buttons (GtkHeaderBar *bar)
 }
 
 gboolean
-_gtk_header_bar_get_shows_app_menu (GtkHeaderBar *bar)
+_gtk_header_bar_shows_app_menu (GtkHeaderBar *bar)
 {
   GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (bar);
+  GtkWindow *window;
+  gchar *layout_desc;
+  gboolean ret;
+
+  window = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (bar)));
+  gtk_widget_style_get (GTK_WIDGET (window),
+                        "decoration-button-layout", &layout_desc,
+                        NULL);
+
+  ret = priv->shows_wm_decorations &&
+        (layout_desc && strstr (layout_desc, "menu"));
+
+  g_free (layout_desc);
 
-  return (priv->titlebar_menu_button != NULL);
+  return ret;
 }
 
 static void
index 58cd3bb2849431b0ef5455345adbf43812a7d251..66c5433bdfe7b76672c388513c37d9039ea92ae6 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef __GTK_HEADER_BAR_PRIVATE_H__
 #define __GTK_HEADER_BAR_PRIVATE_H__
 
-gboolean     _gtk_header_bar_get_shows_app_menu    (GtkHeaderBar *bar);
+gboolean     _gtk_header_bar_shows_app_menu        (GtkHeaderBar *bar);
 void         _gtk_header_bar_update_window_buttons (GtkHeaderBar *bar);
 gboolean     _gtk_header_bar_update_window_icon    (GtkHeaderBar *bar,
                                                     GtkWindow    *window);
index 66e2fd38b2cf89a251ae08e4baab7aedb3ce8cf4..92b8f7e92c8f559747ed9c088b9c81ceb19e657f 100644 (file)
@@ -3619,7 +3619,7 @@ _gtk_window_titlebar_shows_app_menu (GtkWindow *window)
   GtkWindowPrivate *priv = window->priv;
 
   if (GTK_IS_HEADER_BAR (priv->title_box))
-    return gtk_header_bar_get_show_close_button (GTK_HEADER_BAR (priv->title_box));
+    return _gtk_header_bar_shows_app_menu (GTK_HEADER_BAR (priv->title_box));
 
   return FALSE;
 }